package ar.fi.uba.celdas.interfaces.ambiente.mock;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import ar.fi.uba.celdas.interfaces.ambiente.IAccion;
import ar.fi.uba.celdas.interfaces.ambiente.IInfoRobot;
import ar.fi.uba.celdas.interfaces.bc.Sensor;

public class MockInfoRobot implements IInfoRobot {

	final ArrayList<Sensor> sensores = new ArrayList<Sensor>();
	final ArrayList<Sensor> objetivo = new ArrayList<Sensor>();
	final ArrayList<IAccion> acciones = new ArrayList<IAccion>(); 
	
	public MockInfoRobot() {
		sensores.add(new Sensor("NORTE", 2));
		sensores.add(new Sensor("SUR", 2));
		sensores.add(new Sensor("ESTE", 0));
		sensores.add(new Sensor("OESTE", 4));
		sensores.add(new Sensor("POSX", 10));
		sensores.add(new Sensor("POSY", 11));
		
		objetivo.add(new Sensor("POSX", 50));
		objetivo.add(new Sensor("POSY", 51));
		
		acciones.add(new Accion("AVANZAR"));
		acciones.add(new Accion("GIRAR90"));
		acciones.add(new Accion("GIRAR180"));
		acciones.add(new Accion("GIRAR270"));
		
	}
	
	@Override
	public Collection<Sensor> getEstado() {
		return copiaSensores(sensores);
	}

	private List<Sensor> copiaSensores(List<Sensor> lista) {
		ArrayList<Sensor> copiaEstado = new ArrayList<Sensor>();
		for (Sensor s : lista)
			copiaEstado.add(s.clone());
		return copiaEstado;
	}

	@Override
	public Collection<Sensor> getObjetivo() {
		return copiaSensores(objetivo);
	}

	@Override
	public Collection<IAccion> getAccionesDisponibles() {
		return new ArrayList<IAccion>(acciones);
	}

	private static class Accion implements IAccion {
		final private String nombre;
		
		public Accion(String nombre) {
			this.nombre = nombre;
		}
		
		@Override
		public String getNombre() {
			return nombre;
		}
		
	}

	@Override
	public boolean ultimasAccionesExitosas() {
		return true;
	}

	@Override
	public int getMaxValor(Sensor sensor) {
		return 5;
	}

	@Override
	public int getMinValor(Sensor sensor) {
		return 0;
	}

	@Override
	public Collection<Collection<IAccion>> getAccionesPosibles() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Collection<Sensor> getPosicionActual() {
		// TODO Auto-generated method stub
		return null;
	}
	
}
